home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
PROGMISC
/
PCSSP.LZH
/
PC-SSP.ZIP
/
MATINSL.ZIP
/
DGELB.FOR
next >
Wrap
Text File
|
1985-11-29
|
7KB
|
249 lines
C
C ..................................................................
C
C SUBROUTINE DGELB
C
C PURPOSE
C TO SOLVE A SYSTEM OF SIMULTANEOUS LINEAR EQUATIONS WITH A
C COEFFICIENT MATRIX OF BAND STRUCTURE.
C
C USAGE
C CALL DGELB(R,A,M,N,MUD,MLD,EPS,IER)
C
C DESCRIPTION OF PARAMETERS
C R - DOUBLE PRECISION M BY N RIGHT HAND SIDE MATRIX
C (DESTROYED). ON RETURN R CONTAINS THE SOLUTION
C OF THE EQUATIONS.
C A - DOUBLE PRECISION M BY M COEFFICIENT MATRIX WITH
C BAND STRUCTURE (DESTROYED).
C M - THE NUMBER OF EQUATIONS IN THE SYSTEM.
C N - THE NUMBER OF RIGHT HAND SIDE VECTORS.
C MUD - THE NUMBER OF UPPER CODIAGONALS (THAT MEANS
C CODIAGONALS ABOVE MAIN DIAGONAL).
C MLD - THE NUMBER OF LOWER CODIAGONALS (THAT MEANS
C CODIAGONALS BELOW MAIN DIAGONAL).
C EPS - SINGLE PRECISION INPUT CONSTANT WHICH IS USED AS
C RELATIVE TOLERANCE FOR TEST ON LOSS OF
C SIGNIFICANCE.
C IER - RESULTING ERROR PARAMETER CODED AS FOLLOWS
C IER=0 - NO ERROR,
C IER=-1 - NO RESULT BECAUSE OF WRONG INPUT PARAME-
C TERS M,MUD,MLD OR BECAUSE OF PIVOT ELEMENT
C AT ANY ELIMINATION STEP EQUAL TO 0,
C IER=K - WARNING DUE TO POSSIBLE LOSS OF SIGNIFI-
C CANCE INDICATED AT ELIMINATION STEP K+1,
C WHERE PIVOT ELEMENT WAS LESS THAN OR
C EQUAL TO THE INTERNAL TOLERANCE EPS TIMES
C ABSOLUTELY GREATEST ELEMENT OF MATRIX A.
C
C REMARKS
C BAND MATRIX A IS ASSUMED TO BE STORED ROWWISE IN THE FIRST
C ME SUCCESSIVE STORAGE LOCATIONS OF TOTALLY NEEDED MA
C STORAGE LOCATIONS, WHERE
C MA=M*MC-ML*(ML+1)/2 AND ME=MA-MU*(MU+1)/2 WITH
C MC=MIN(M,1+MUD+MLD), ML=MC-1-MLD, MU=MC-1-MUD.
C RIGHT HAND SIDE MATRIX R IS ASSUMED TO BE STORED COLUMNWISE
C IN N*M SUCCESSIVE STORAGE LOCATIONS. ON RETURN SOLUTION
C MATRIX R IS STORED COLUMNWISE TOO.
C INPUT PARAMETERS M, MUD, MLD SHOULD SATISFY THE FOLLOWING
C RESTRICTIONS MUD NOT LESS THAN ZERO
C MLD NOT LESS THAN ZERO
C MUD+MLD NOT GREATER THAN 2*M-2.
C NO ACTION BESIDES ERROR MESSAGE IER=-1 TAKES PLACE IF THESE
C RESTRICTIONS ARE NOT SATISFIED.
C THE PROCEDURE GIVES RESULTS IF THE RESTRICTIONS ON INPUT
C PARAMETERS ARE SATISFIED AND IF PIVOT ELEMENTS AT ALL
C ELIMINATION STEPS ARE DIFFERENT FROM 0. HOWEVER WARNING
C IER=K - IF GIVEN - INDICATES POSSIBLE LOSS OF SIGNIFICANCE.
C IN CASE OF A WELL SCALED MATRIX A AND APPROPRIATE TOLERANCE
C EPS, IER=K MAY BE INTERPRETED THAT MATRIX A HAS THE RANK K.
C NO WARNING IS GIVEN IF MATRIX A HAS NO LOWER CODIAGONAL.
C
C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
C NONE
C
C METHOD
C SOLUTION IS DONE BY MEANS OF GAUSS ELIMINATION WITH
C COLUMN PIVOTING ONLY, IN ORDER TO PRESERVE BAND STRUCTURE
C IN REMAINING COEFFICIENT MATRICES.
C
C ..................................................................
C
SUBROUTINE DGELB(R,A,M,N,MUD,MLD,EPS,IER)
C
C
DIMENSION R(1),A(1)
DOUBLE PRECISION R,A,PIV,TB,TOL
C
C TEST ON WRONG INPUT PARAMETERS
IF(MLD)47,1,1
1 IF(MUD)47,2,2
2 MC=1+MLD+MUD
IF(MC+1-M-M)3,3,47
C
C PREPARE INTEGER PARAMETERS
C MC=NUMBER OF COLUMNS IN MATRIX A
C MU=NUMBER OF ZEROS TO BE INSERTED IN FIRST ROW OF MATRIX A
C ML=NUMBER OF MISSING ELEMENTS IN LAST ROW OF MATRIX A
C MR=INDEX OF LAST ROW IN MATRIX A WITH MC ELEMENTS
C MZ=TOTAL NUMBER OF ZEROS TO BE INSERTED IN MATRIX A
C MA=TOTAL NUMBER OF STORAGE LOCATIONS NECESSARY FOR MATRIX A
C NM=NUMBER OF ELEMENTS IN MATRIX R
3 IF(MC-M)5,5,4
4 MC=M
5 MU=MC-MUD-1
ML=MC-MLD-1
MR=M-ML
MZ=(MU*(MU+1))/2
MA=M*MC-(ML*(ML+1))/2
NM=N*M
C
C MOVE ELEMENTS BACKWARD AND SEARCH FOR ABSOLUTELY GREATEST ELEMENT
C (NOT NECESSARY IN CASE OF A MATRIX WITHOUT LOWER CODIAGONALS)
IER=0
PIV=0.D0
IF(MLD)14,14,6
6 JJ=MA
J=MA-MZ
KST=J
DO 9 K=1,KST
TB=A(J)
A(JJ)=TB
TB=DABS(TB)
IF(TB-PIV)8,8,7
7 PIV=TB
8 J=J-1
9 JJ=JJ-1
C
C INSERT ZEROS IN FIRST MU ROWS (NOT NECESSARY IN CASE MZ=0)
IF(MZ)14,14,10
10 JJ=1
J=1+MZ
IC=1+MUD
DO 13 I=1,MU
DO 12 K=1,MC
A(JJ)=0.D0
IF(K-IC)11,11,12
11 A(JJ)=A(J)
J=J+1
12 JJ=JJ+1
13 IC=IC+1
C
C GENERATE TEST VALUE FOR SINGULARITY
14 TOL=EPS*PIV
C
C
C START DECOMPOSITION LOOP
KST=1
IDST=MC
IC=MC-1
DO 38 K=1,M
IF(K-MR-1)16,16,15
15 IDST=IDST-1
16 ID=IDST
ILR=K+MLD
IF(ILR-M)18,18,17
17 ILR=M
18 II=KST
C
C PIVOT SEARCH IN FIRST COLUMN (ROW INDEXES FROM I=K UP TO I=ILR)
PIV=0.D0
DO 22 I=K,ILR
TB=DABS(A(II))
IF(TB-PIV)20,20,19
19 PIV=TB
J=I
JJ=II
20 IF(I-MR)22,22,21
21 ID=ID-1
22 II=II+ID
C
C TEST ON SINGULARITY
IF(PIV)47,47,23
23 IF(IER)26,24,26
24 IF(PIV-TOL)25,25,26
25 IER=K-1
26 PIV=1.D0/A(JJ)
C
C PIVOT ROW REDUCTION AND ROW INTERCHANGE IN RIGHT HAND SIDE R
ID=J-K
DO 27 I=K,NM,M
II=I+ID
TB=PIV*R(II)
R(II)=R(I)
27 R(I)=TB
C
C PIVOT ROW REDUCTION AND ROW INTERCHANGE IN COEFFICIENT MATRIX A
II=KST
J=JJ+IC
DO 28 I=JJ,J
TB=PIV*A(I)
A(I)=A(II)
A(II)=TB
28 II=II+1
C
C ELEMENT REDUCTION
IF(K-ILR)29,34,34
29 ID=KST
II=K+1
MU=KST+1
MZ=KST+IC
DO 33 I=II,ILR
C
C IN MATRIX A
ID=ID+MC
JJ=I-MR-1
IF(JJ)31,31,30
30 ID=ID-JJ
31 PIV=-A(ID)
J=ID+1
DO 32 JJ=MU,MZ
A(J-1)=A(J)+PIV*A(JJ)
32 J=J+1
A(J-1)=0.D0
C
C IN MATRIX R
J=K
DO 33 JJ=I,NM,M
R(JJ)=R(JJ)+PIV*R(J)
33 J=J+M
34 KST=KST+MC
IF(ILR-MR)36,35,35
35 IC=IC-1
36 ID=K-MR
IF(ID)38,38,37
37 KST=KST-ID
38 CONTINUE
C END OF DECOMPOSITION LOOP
C
C
C BACK SUBSTITUTION
IF(MC-1)46,46,39
39 IC=2
KST=MA+ML-MC+2
II=M
DO 45 I=2,M
KST=KST-MC
II=II-1
J=II-MR
IF(J)41,41,40
40 KST=KST+J
41 DO 43 J=II,NM,M
TB=R(J)
MZ=KST+IC-2
ID=J
DO 42 JJ=KST,MZ
ID=ID+1
42 TB=TB-A(JJ)*R(ID)
43 R(J)=TB
IF(IC-MC)44,45,45
44 IC=IC+1
45 CONTINUE
46 RETURN
C
C
C ERROR RETURN
47 IER=-1
RETURN
END